package com.siashan.toolkit.oss.core;

import com.siashan.toolkit.oss.core.util.StrUtil;

import java.io.InputStream;
import java.util.UUID;

/**
 * 云存储(支持七牛云、阿里云、腾讯云、又拍云)
 *
 * @author siashan
 * @since 1.0.1
 */
public abstract class OssStorageService {

    private String channelCode;


    /**
     * 文件路径
     *
     * @param prefix 前缀
     * @param suffix 后缀
     * @return 返回上传路径
     * @since 1.0.1
     */
    public String getPath(String prefix, String suffix) {
        //生成uuid
        String path = UUID.randomUUID().toString().replaceAll("-", "");
        if (StrUtil.isNotEmpty(prefix)) {
            path = prefix + "/" + path;
        }

        return path + suffix;
    }

    /**
     * 文件上传
     *
     * @param data    文件字节数组
     * @param path    文件路径，包含文件名
     * @return        文件上传结果
     * @since 1.0.1
     */
    public abstract OssResult upload(byte[] data, String path);

    /**
     * 文件上传
     *
     * @param data     文件字节数组
     * @param suffix   文件后缀
     * @return         文件上传结果
     * @since 1.0.1
     */
    public abstract OssResult uploadSuffix(byte[] data, String suffix);

    /**
     * 文件上传
     *
     * @param inputStream   字节流
     * @param path          文件路径，包含文件名
     * @return              文件上传结果
     * @since 1.0.1
     */
    public abstract OssResult upload(InputStream inputStream, String path);

    /**
     * 文件上传
     *
     * @param inputStream  字节流
     * @param suffix       文件后缀
     * @return             文件上传结果
     * @since 1.0.1
     */
    public abstract OssResult uploadSuffix(InputStream inputStream, String suffix);


    /**
     * 文件删除
     *
     * @param fileName  资源名称
     * @return  是否成功标识
     * @since 1.0.2
     */
    public abstract boolean remove(String fileName);


    /**
     * 获取渠道编码
     *
     * @return  渠道编码
     */

    public String getChannelCode(){
        return channelCode;
    }


    public void setChannelCode(String channelCode){
        this.channelCode = channelCode;
    }

}
